<?php

/**
 * PROFESOR actions.
 *
 * @package    OPENBIBLIOSOFT
 * @subpackage PROFESOR
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class PROFESORActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
    if($this->getUser()->getAttribute('codigoUsuario') == null)
	{
		return  $this->renderText("<script type='text/javascript'> window.location = 'Entrada'; </script> ");
	}
  }
	
	public function executeListar()
	{
		$buscar = $this->getRequestParameter('Busqueda');
		$buscar = "%".$buscar."%";
		$campo = $this->getRequestParameter('Campo');
		
		$conexion = new Criteria();
		$conexion->addJoin(ProfesorPeer::CODIGO, UsuarioPeer::CODIGO);
		
		if($campo == 'Nombre'){ $conexion->add(UsuarioPeer::NOMBRE, $buscar, Criteria::LIKE);}
		if($campo == 'Identificacion'){ $conexion->add(UsuarioPeer::IDENTIFICACION, $buscar, Criteria::LIKE);}
		if($campo == 'Direccion'){ $conexion->add(UsuarioPeer::DIRECCION, $buscar, Criteria::LIKE);}
		if($campo == 'Telefono'){ $conexion->add(UsuarioPeer::TELEFONO, $buscar, Criteria::LIKE);}
		if($campo == 'Email'){ $conexion->add(UsuarioPeer::EMAIL, $buscar, Criteria::LIKE);}
		if($campo == 'Dependencia'){ $conexion->add(ProfesorPeer::DEPENDENCIA, $buscar, Criteria::LIKE);}
		if($campo == 'Titulo'){ $conexion->add(ProfesorPeer::CARRERA, $buscar, Criteria::LIKE);}
		if($campo == 'Todos')
		{		
			$c1 = $conexion->getNewCriterion(UsuarioPeer::NOMBRE, $buscar, Criteria::LIKE);
			$c2 = $conexion->getNewCriterion(UsuarioPeer::IDENTIFICACION, $buscar, Criteria::LIKE);
			$c3 = $conexion->getNewCriterion(UsuarioPeer::DIRECCION, $buscar, Criteria::LIKE);
			$c4 = $conexion->getNewCriterion(UsuarioPeer::TELEFONO, $buscar, Criteria::LIKE);
			$c5 = $conexion->getNewCriterion(UsuarioPeer::EMAIL, $buscar, Criteria::LIKE);
			$c6 = $conexion->getNewCriterion(ProfesorPeer::DEPENDENCIA, $buscar, Criteria::LIKE);
			$c7 = $conexion->getNewCriterion(ProfesorPeer::TITULO, $buscar, Criteria::LIKE);
			$c6->addOr($c7);
			$c5->addOr($c6);
			$c4->addOr($c5);
			$c3->addOr($c4);
			$c2->addOr($c3);
			$c1->addOr($c2);
			$conexion->add($c1);
		}
		
		$numeroProfesors = UsuarioPeer::doCount($conexion);
		$conexion->setLimit($this->getRequestParameter('limit'));
		$conexion->setOffset($this->getRequestParameter('start'));
		$profesors = UsuarioPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($profesors As $temporal)
		{
			$datos[$pos]['profesorCodigo']=$temporal->getCodigo();
			$datos[$pos]['profesorIdentificacion']=$temporal->getIdentificacion();
			$datos[$pos]['profesorNombre']=$temporal->getNombre();
			$datos[$pos]['profesorDireccion']=$temporal->getDireccion();
			$datos[$pos]['profesorTelefono']=$temporal->getTelefono();
			$datos[$pos]['profesorEmail']=$temporal->getEmail();
			$datos[$pos]['profesorDependencia']=$this->getDependencia($temporal->getCodigo());
			$datos[$pos]['profesorTitulo']=$this->getTitulo($temporal->getCodigo());
			$codigoAreas=null;
			$nombreAreas=null;
			$this->getAreasConocimiento($temporal->getCodigo(), $codigoAreas, $nombreAreas);
			$datos[$pos]['profesorAreasConocimiento']=$codigoAreas;
			$datos[$pos]['profesorNombreAreasConocimiento']=$nombreAreas;
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroProfesors.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function getAreasConocimiento($codigo, &$codigoAreas, &$nombreAreas)
	{
		$conexion = new Criteria();
		$conexion->add(ProfesorareaPeer::CODIGO, $codigo);
		
		if($conexion)
		{
			$areas = ProfesorareaPeer::doSelect($conexion);
			foreach ($areas As $temporal)
			{
				$codigoAreas.=$temporal->getAreaconocimiento()->getCodigo().",";
				$nombreAreas.=$temporal->getAreaconocimiento()->getNombre().", ";
			}
			if($codigoAreas)
			{
				$codigoAreas = substr($codigoAreas, 0, -1);
			}
			if($nombreAreas)
			{
				$nombreAreas = substr($nombreAreas, 0, -2);
			}
		}
	}
	
	public function getDependencia($codigo)
	{
		$dependencia = '';
		$conexion = new Criteria();
		$conexion->add(ProfesorPeer::CODIGO, $codigo);
		
		if($conexion)
		{
			$profesor = ProfesorPeer::doSelectOne($conexion);
			$dependencia = $profesor->getDependencia();
		}
		else
		{
			$dependencia = 'sin dependencia';
		}
		
		return $dependencia;
	}
	
	public function getTitulo($codigo)
	{
		$titulo = '';
		$conexion = new Criteria();
		$conexion->add(ProfesorPeer::CODIGO, $codigo);
		
		if($conexion)
		{
			$profesor = ProfesorPeer::doSelectOne($conexion);
			$titulo = $profesor->getTitulo();
		}
		else
		{
			$titulo = 'sin titulo';
		}
		
		return $titulo;
	}
	
	public function executeGuardar()
	{
		$areas = $this->getRequestParameter('AreasConocimiento');
		$areasConocimiento;
		if($areas != '')
		{
			$areasConocimiento = explode(',', $areas);
		}
	
		$usuario = new Usuario();
		$usuario->setCodigo($this->getRequestParameter('Codigo'));
		$usuario->setNombre($this->getRequestParameter('Nombre'));
		$usuario->setIdentificacion($this->getRequestParameter('Identificacion'));
		$usuario->setDireccion($this->getRequestParameter('Direccion'));
		$usuario->setTelefono($this->getRequestParameter('Telefono'));
		$usuario->setEmail($this->getRequestParameter('Email'));
		$profesor = new Profesor();
		$profesor->setCodigo($this->getRequestParameter('Codigo'));
		$profesor->setDependencia($this->getRequestParameter('Dependencia'));
		$profesor->setTitulo($this->getRequestParameter('Titulo'));

		try
		{
			$usuario->save();
			$profesor->save();
			
			if($areas != '')
			{
				foreach($areasConocimiento As $temporal)
				{
					$profesorArea = new Profesorarea();
					$profesorArea->setCodigo($this->getRequestParameter('Codigo'));
					$profesorArea->setAreCodigo($temporal);
					$profesorArea->save();
				}
			}
		}
		catch (Exception $excepcionUsuario)
		{
			return  $this->renderText("({success: false, errors: { reason: 'Exception: Hubo un problema creando el profesor: ".$this->getRequestParameter('Nombre')."'}})");
		}
		return  $this->renderText("({success: true, mensaje:'El profesor fue creado exitosamente '})");
	}
	
	public function executeActualizar()
	{
		$areas = $this->getRequestParameter('AreasConocimiento');
		$areasConocimiento;
		if($areas != '')
		{
			$areasConocimiento = explode(',', $areas);
		}
		
		$profesorCodigoViejo = $this->getRequestParameter('CodigoViejo');
		$conexion = new Criteria();
		$conexion->add(ProfesorPeer::CODIGO, $profesorCodigoViejo);
		$profesor = ProfesorPeer::doSelectOne($conexion);

		if($profesor)
		{
			  	try
		      	{
					//$profesor->getUsuario()->setPrimaryKey($this->getRequestParameter('Codigo'));//setPrimaryKey
					//$profesor->setPrimaryKey($this->getRequestParameter('Codigo'));
					$profesor->getUsuario()->setIdentificacion($this->getRequestParameter('Identificacion'));
					$profesor->getUsuario()->setNombre($this->getRequestParameter('Nombre'));
					$profesor->getUsuario()->setDireccion($this->getRequestParameter('Direccion'));
		        	$profesor->getUsuario()->setTelefono($this->getRequestParameter('Telefono'));
					$profesor->getUsuario()->setEmail($this->getRequestParameter('Email'));
					$profesor->setDependencia($this->getRequestParameter('Dependencia'));
					$profesor->setTitulo($this->getRequestParameter('Titulo'));
		        	$profesor->save();
					
					$conexion = new Criteria();
					$conexion->add(ProfesorareaPeer::CODIGO, $profesorCodigoViejo);
					
					if($conexion)
					{
						$areas = ProfesorareaPeer::doSelect($conexion);
						foreach ($areas As $temporal)
						{
							$temporal->delete();
						}
					}
					if($areas != '')
					{
						foreach($areasConocimiento As $temporal)
						{
							$profesorArea = new Profesorarea();
							$profesorArea->setCodigo($profesorCodigoViejo);
							$profesorArea->setAreCodigo($temporal);
							$profesorArea->save();
						}
					}
		      	}
		      	catch (Exception $excepcionProfesor)
		      	{
		          	return  $this->renderText("({success: false, errors: { reason: 'Exception: Problemas al actualizar el profesor: ".$this->getRequestParameter('Nombre')."'}})");
		        
		      	}
				return  $this->renderText("({success: true, mensaje:'El profesor fue actualizado exitosamente'})");
		} else {
			return  $this->renderText("({success: false, errors: { reason: 'No se a actualizado el profesor correctamente'}})");
		}
	}
	
	public function executeListarAreasCononocimiento()
	{
		
		$conexion = new Criteria();
		$numeroAreasConocimiento = AreaconocimientoPeer::doCount($conexion);
		$areasConocimiento = AreaconocimientoPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($areasConocimiento As $temporal)
		{
			$datos[$pos]['profesorAreaConocimientoCodigoCombo']=$temporal->getCodigo();
			$datos[$pos]['profesorAreaConocimientoNombreCombo']=$temporal->getNombre();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroAreasConocimiento.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}

	public function executeListarAreasCononocimientoProfesor()
	{
		
		$conexion = new Criteria();
		$conexion->add(ProfesorareaPeer::CODIGO, $this->getRequestParameter('Codigo'));
		$numeroAreasConocimiento = ProfesorareaPeer::doCount($conexion);
		$areasConocimiento = ProfesorareaPeer::doSelect($conexion);
		$pos = 0;
		$nbrows=0;
		$datos;
		
		foreach ($areasConocimiento As $temporal)
		{
			$datos[$pos]['profesorAreaConocimientoCodigoCombo']=$temporal->getAreaconocimiento()->getCodigo();
			$datos[$pos]['profesorAreaConocimientoNombreCombo']=$temporal->getAreaconocimiento()->getNombre();
			
			$pos++;
			$nbrows++;
		}
		
		if($nbrows>0){
			$jsonresult = json_encode($datos);
			return  $this->renderText('({"total":"'.$numeroAreasConocimiento.'","results":'.$jsonresult.'})');
		}
		else {
			return  $this->renderText('({"total":"0", "results":""})');
		}
	}
	
	public function executeEliminar()
	{
		$codigo = $this->getRequestParameter('Codigo');

		$conexion = new Criteria();
		$conexion->add(UsuarioPeer::CODIGO, $codigo);
		if($conexion)
		{
			$usuario = UsuarioPeer::doSelectOne($conexion);
			
			try
			{
				$usuario->delete();
				
				$conexion = new Criteria();
				$conexion->add(ProfesorPeer::CODIGO, $codigo);
				$profesor = ProfesorPeer::doSelectOne($conexion);
				$profesor->delete();
				
				$areasProfesor;
				$conexion = new Criteria();
				$conexion->add(ProfesorareaPeer::CODIGO, $codigo);
				
				if($conexion)
				{
					$areas = ProfesorareaPeer::doSelect($conexion);
					foreach ($areas As $temporal)
					{
						$temporal->delete();
					}
				}
			}
			catch (Exception $excepcionProfesor)
			{
				return  $this->renderText("({success: false, errors: { reason: 'Exception: No se pudo eliminar el profesor'}})");
			}
		
			return  $this->renderText("({success: true, mensaje:'El profesor fue eliminado exitosamente'})");
		}
		else
		{
			return  $this->renderText("({success: false, errors: { reason: 'No se pudo eliminar el profesor'}})");
		}
	}
}
